{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "ebd66700",
   "metadata": {},
   "source": [
    "## Demo_GradCam\n",
    "This is a demo for visualizing the Grad-CAM of a Neuron Network\n",
    "\n",
    "To run this demo from scratch, you need first generate a BadNet attack result by using the following cell"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b950f4fc",
   "metadata": {},
   "outputs": [],
   "source": [
    "! python ../../attack/badnet.py - -save_folder_name badnet_demo\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8f81f973",
   "metadata": {},
   "source": [
    "or run the following command in your terminal\n",
    "\n",
    "```python attack/badnet.py --save_folder_name badnet_demo```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "87bd9f5a",
   "metadata": {},
   "source": [
    "### Step 1: Import modules and set arguments"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "71b7087b",
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys, os\n",
    "import yaml\n",
    "import torch\n",
    "import shap\n",
    "import numpy as np\n",
    "import torchvision.transforms as transforms\n",
    "\n",
    "sys.path.append(\"../\")\n",
    "sys.path.append(\"../../\")\n",
    "sys.path.append(os.getcwd())\n",
    "from visual_utils import *\n",
    "from utils.aggregate_block.dataset_and_transform_generate import (\n",
    "    get_transform,\n",
    "    get_dataset_denormalization,\n",
    ")\n",
    "from utils.aggregate_block.fix_random import fix_random\n",
    "from utils.aggregate_block.model_trainer_generate import generate_cls_model\n",
    "from utils.save_load_attack import load_attack_result\n",
    "from utils.defense_utils.dbd.model.utils import (\n",
    "    get_network_dbd,\n",
    "    load_state,\n",
    "    get_criterion,\n",
    "    get_optimizer,\n",
    "    get_scheduler,\n",
    ")\n",
    "from utils.defense_utils.dbd.model.model import SelfModel, LinearModel\n",
    "from pytorch_grad_cam import (\n",
    "    GradCAM,\n",
    "    ScoreCAM,\n",
    "    GradCAMPlusPlus,\n",
    "    AblationCAM,\n",
    "    XGradCAM,\n",
    "    EigenCAM,\n",
    "    FullGrad,\n",
    ")\n",
    "from pytorch_grad_cam.utils.image import show_cam_on_image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "2fb719c7",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Basic setting: args\n",
    "args = get_args(True)\n",
    "\n",
    "########## For Demo Only ##########\n",
    "args.yaml_path = \"../../\"+args.yaml_path\n",
    "args.result_file_attack = \"badnet_demo\"\n",
    "######## End For Demo Only ##########\n",
    "\n",
    "with open(args.yaml_path, \"r\") as stream:\n",
    "    config = yaml.safe_load(stream)\n",
    "config.update({k: v for k, v in args.__dict__.items() if v is not None})\n",
    "args.__dict__ = config\n",
    "args = preprocess_args(args)\n",
    "fix_random(int(args.random_seed))\n",
    "\n",
    "save_path_attack = \"../..//record/\" + args.result_file_attack\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f959b510",
   "metadata": {},
   "source": [
    "### Step 2: Load data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "b8b67ac9",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:root:save_path MUST have 'record' in its abspath, and data_path in attack result MUST have 'data' in its path\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Files already downloaded and verified\n",
      "Files already downloaded and verified\n",
      "loading...\n",
      "max_num_samples is given, use sample number limit now.\n",
      "subset bd dataset with length:  4995\n",
      "Create visualization dataset with \n",
      " \t Dataset: bd_test \n",
      " \t Number of samples: 4995  \n",
      " \t Selected classes: [0 1 2 3 4 5 6 7 8 9]\n"
     ]
    }
   ],
   "source": [
    "# Load result\n",
    "result_attack = load_attack_result(save_path_attack + \"/attack_result.pt\")\n",
    "selected_classes = np.arange(args.num_classes)\n",
    "\n",
    "# Select classes to visualize\n",
    "if args.num_classes > args.c_sub:\n",
    "    selected_classes = np.delete(selected_classes, args.target_class)\n",
    "    selected_classes = np.random.choice(\n",
    "        selected_classes, args.c_sub-1, replace=False)\n",
    "    selected_classes = np.append(selected_classes, args.target_class)\n",
    "\n",
    "# keep the same transforms for train and test dataset for better visualization\n",
    "result_attack[\"clean_train\"].wrap_img_transform = result_attack[\"clean_test\"].wrap_img_transform \n",
    "result_attack[\"bd_train\"].wrap_img_transform = result_attack[\"bd_test\"].wrap_img_transform \n",
    "\n",
    "# Create dataset\n",
    "args.visual_dataset = 'bd_test'\n",
    "if args.visual_dataset == 'mixed':\n",
    "    bd_test_with_trans = result_attack[\"bd_test\"]\n",
    "    visual_dataset = generate_mix_dataset(\n",
    "        bd_test_with_trans, args.target_class, args.pratio, selected_classes, max_num_samples=args.n_sub)\n",
    "elif args.visual_dataset == 'clean_train':\n",
    "    clean_train_with_trans = result_attack[\"clean_train\"]\n",
    "    visual_dataset = generate_clean_dataset(\n",
    "        clean_train_with_trans, selected_classes, max_num_samples=args.n_sub)\n",
    "elif args.visual_dataset == 'clean_test':\n",
    "    clean_test_with_trans = result_attack[\"clean_test\"]\n",
    "    visual_dataset = generate_clean_dataset(\n",
    "        clean_test_with_trans, selected_classes, max_num_samples=args.n_sub)\n",
    "elif args.visual_dataset == 'bd_train':\n",
    "    bd_train_with_trans = result_attack[\"bd_train\"]\n",
    "    visual_dataset = generate_bd_dataset(\n",
    "        bd_train_with_trans, args.target_class, selected_classes, max_num_samples=args.n_sub)\n",
    "elif args.visual_dataset == 'bd_test':\n",
    "    bd_test_with_trans = result_attack[\"bd_test\"]\n",
    "    visual_dataset = generate_bd_dataset(\n",
    "        bd_test_with_trans, args.target_class, selected_classes, max_num_samples=args.n_sub)\n",
    "else:\n",
    "    assert False, \"Illegal vis_class\"\n",
    "\n",
    "print(\n",
    "    f'Create visualization dataset with \\n \\t Dataset: {args.visual_dataset} \\n \\t Number of samples: {len(visual_dataset)}  \\n \\t Selected classes: {selected_classes}')\n",
    "\n",
    "# Create data loader\n",
    "data_loader = torch.utils.data.DataLoader(\n",
    "    visual_dataset, batch_size=args.batch_size, num_workers=args.num_workers, shuffle=False\n",
    ")\n",
    "\n",
    "# Create denormalization function\n",
    "for trans_t in data_loader.dataset.wrap_img_transform.transforms:\n",
    "    if isinstance(trans_t, transforms.Normalize):\n",
    "        denormalizer = get_dataset_denormalization(trans_t)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "39104beb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number Poisoned samples: 4995\n",
      "Select 2 poisoned samples\n",
      "Select 2 clean samples\n"
     ]
    }
   ],
   "source": [
    "# Choose samples to show Grad-CAM values. By Default, 2 clean images + 2 Poison images. If no enough Poison images, use 4 clean images instead.AblationCAM\n",
    "total_num = 4\n",
    "bd_num = 0\n",
    "\n",
    "visual_samples = []\n",
    "visual_labels = []\n",
    "\n",
    "visual_poison_indicator = np.array(\n",
    "    get_poison_indicator_from_bd_dataset(visual_dataset))\n",
    "if visual_poison_indicator.sum() > 0:\n",
    "    print(f'Number Poisoned samples: {visual_poison_indicator.sum()}')\n",
    "    # random choose two poisoned samples\n",
    "    selected_bd_idx = np.random.choice(\n",
    "        np.where(visual_poison_indicator == 1)[0], 2, replace=False)\n",
    "    for i in selected_bd_idx:\n",
    "        visual_samples.append(visual_dataset[i][0].unsqueeze(0))\n",
    "        visual_labels.append(visual_dataset[i][4])\n",
    "    bd_num = len(selected_bd_idx)\n",
    "    print(f'Select {bd_num} poisoned samples')\n",
    "\n",
    "# Trun all samples to clean\n",
    "with temporary_all_clean(visual_dataset):\n",
    "    # you can just set selected_clean_idx = selected_bd_idx to build the correspondence between clean samples and poisoned samples\n",
    "    selected_clean_idx = np.random.choice(\n",
    "        len(visual_dataset), total_num-bd_num, replace=False)\n",
    "    for i in selected_clean_idx:\n",
    "        visual_samples.append(visual_dataset[i][0].unsqueeze(0))\n",
    "        visual_labels.append(visual_dataset[i][1])\n",
    "    print(f'Select {len(selected_clean_idx)} clean samples')\n",
    "\n",
    "# Clean sample first\n",
    "visual_samples = visual_samples[::-1]\n",
    "visual_labels = visual_labels[::-1]\n",
    "\n",
    "visual_samples = torch.cat(visual_samples, axis=0).to(args.device)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e3f652e5",
   "metadata": {},
   "source": [
    "### Step 3: Load Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "ff67e7b8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Load model preactresnet18 from badnet_demo\n"
     ]
    }
   ],
   "source": [
    "# Load model\n",
    "model_visual = generate_cls_model(args.model, args.num_classes)\n",
    "model_visual.load_state_dict(result_attack[\"model\"])\n",
    "model_visual.to(args.device)\n",
    "# !!! Important to set eval mode !!!\n",
    "model_visual.eval()\n",
    "print(f\"Load model {args.model} from {args.result_file_attack}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cc952077",
   "metadata": {},
   "source": [
    "### Step 4: Plot Grad-CAM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "94612903",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Plotting Grad-CAM\n",
      "Choose layer layer4.1.conv2 from model preactresnet18\n",
      "Warning: target_layers is ignored in FullGrad. All bias layers will be used instead\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1440x720 with 8 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "############## Grad-CAM ##################\n",
    "print('Plotting Grad-CAM')\n",
    "\n",
    "module_dict = dict(model_visual.named_modules())\n",
    "target_layer = module_dict[args.target_layer_name]\n",
    "print(f'Choose layer {args.target_layer_name} from model {args.model}')\n",
    "\n",
    "sfm = torch.nn.Softmax(dim=1)\n",
    "outputs = model_visual(visual_samples)\n",
    "pre_p, pre_label = torch.max(sfm(outputs), dim=1)\n",
    "\n",
    "cam = FullGrad(model=model_visual, target_layers=[\n",
    "               target_layer], use_cuda=True if args.device == 'cuda' else False)\n",
    "\n",
    "targets = None\n",
    "\n",
    "# You can also pass aug_smooth=True and eigen_smooth=True, to apply smoothing.\n",
    "grayscale_cam_full = cam(input_tensor=visual_samples, targets=targets)\n",
    "\n",
    "grayscale_cam = grayscale_cam_full[0, :]\n",
    "rgb_image = np.swapaxes(\n",
    "    np.swapaxes(denormalizer(visual_samples[0]).cpu().numpy(), 0, 1), 1, 2\n",
    ")\n",
    "visual_cam = show_cam_on_image(rgb_image, grayscale_cam, use_rgb=True)\n",
    "\n",
    "# get the names for the classes\n",
    "class_names = np.array(args.class_names).reshape([-1])\n",
    "\n",
    "fig, axes = plt.subplots(nrows=2, ncols=4, figsize=(20, 10))\n",
    "for im in range(4):\n",
    "    grayscale_cam = grayscale_cam_full[im, :]\n",
    "    rgb_image = np.swapaxes(\n",
    "        np.swapaxes(denormalizer(visual_samples[im]).cpu().numpy(), 0, 1), 1, 2\n",
    "    )\n",
    "    rgb_image[rgb_image < 1e-12] = 1e-12\n",
    "    visual_cam = show_cam_on_image(rgb_image, grayscale_cam, use_rgb=True)\n",
    "    axes[im // 2, im % 2 * 2].imshow(rgb_image)\n",
    "    axes[im // 2, im % 2 * 2].axis(\"off\")\n",
    "    axes[im // 2, im % 2 * 2].set_title(\n",
    "        \"Original Image: %s\" % (class_names[visual_labels[im]].capitalize())\n",
    "    )\n",
    "    axes[im // 2, im % 2 * 2 + 1].imshow(visual_cam)\n",
    "    axes[im // 2, im % 2 * 2 + 1].axis(\"off\")\n",
    "    axes[im // 2, im % 2 * 2 + 1].set_title(\n",
    "        \"Predicted: %s, %.2f%%\" % (\n",
    "            class_names[pre_label[im]].capitalize(), pre_p[im] * 100)\n",
    "    )\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10 (default, Nov 14 2022, 12:59:47) \n[GCC 9.4.0]"
  },
  "vscode": {
   "interpreter": {
    "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
